1의 보수
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
1의 보수는 이진수를 음의 정수에 대응시키는 방법으로, 양수는 일반적인 이진수 표현을 사용하고 음수는 해당 양수의 비트를 반전시킨 값을 사용한다. 1의 보수는 뺄셈을 덧셈으로 변환하여 계산을 단순화하지만, 0을 000...00과 111...11 두 가지로 표현하는 음의 영(negative zero) 문제를 발생시킨다. 1의 보수 표현에서는 순환 올림(End-Around Carry)이라는 특수한 연산이 필요하며, 2의 보수에 비해 덧셈과 뺄셈 연산이 복잡하다는 단점이 있다.
더 읽어볼만한 페이지
- 단항 연산 - 제곱근
제곱근은 x² = a를 만족하는 x 값으로, a가 양수일 때 두 개의 제곱근을 가지며, 수학, 물리학, 기하학 등 다양한 분야에서 중요한 개념이고, 무리수와도 관련되어 행렬이나 연산자에도 확장된다. - 단항 연산 - 자연로그
자연로그는 밑이 e인 로그 함수로, ln(x) 등으로 표기되며 직교쌍곡선 아래 면적으로 정의되거나 지수 함수의 역함수로 정의될 수 있고, 다양한 수학적 성질과 함께 여러 분야에서 활용되며 복소 로그 함수로 확장되기도 한다. - 컴퓨터 산술 - IEEE 754
IEEE 754는 부동소수점 숫자를 표현하고 처리하기 위한 국제 표준으로, 다양한 형식과 연산, 반올림 규칙, 예외 처리 등을 정의한다. - 컴퓨터 산술 - 삼진법
삼진법은 0, 1, 2 세 가지 숫자를 사용하여 수를 표현하는 위치 기수법으로, 3의 배수 계산에 유리하며, 다양한 분야에서 활용되고 음수를 포함하는 변형된 형태도 존재한다.
1의 보수 | |
---|---|
명칭 | |
이름 | 1의 보수 |
영어 명칭 | Ones' complement |
개요 | |
정의 | 어떤 이진수 x에 대한 1의 보수 x는 (2 − 1) − x로 정의된다. 여기서 n은 x를 나타내는 데 사용되는 비트 수이다. |
예시 | 4비트 이진수에서 4 (0100)의 1의 보수는 11 (1011)이다. |
특징 | |
표현 범위 | 1의 보수 체계에서 n비트로 표현 가능한 정수의 범위는 -(2 - 1)에서 2 - 1까지이다. |
0의 표현 | 1의 보수에서는 +0과 -0 두 가지 표현이 존재한다. |
연산 | 1의 보수를 사용한 덧셈 연산 시, 자리올림이 발생하면 결과에 1을 더해야 한다 (end-around carry). |
활용 | |
사용 예 | 1의 보수는 데이터 전송 과정에서의 오류 검출에 사용될 수 있다. |
단점 | 0의 표현이 두 가지이고, 덧셈 연산이 복잡하여 현대 컴퓨터에서는 거의 사용되지 않는다. 대신 2의 보수가 널리 사용된다. |
2. 수 표현
1의 보수를 이용하여 이진수를 음의 정수에 대응시킬 수 있다. n비트 이진수 x와 그 보수 xc는 다음 관계를 만족한다.[1]
:
위 식에서 2n - 1의 배수를 0으로 간주하면 다음과 같이 표현할 수 있다.
:
이는 x의 보수 xc를 x의 역수 -x로 생각하는 것을 의미한다.
:
0부터 2n-1 - 1까지의 음이 아닌 정수를 일반적인 위치 기수법의 이진 표현에 대응시키면, 이러한 수의 보수로서 음의 정수에 대한 1의 보수 표현을 얻을 수 있다.
n자리 이진수의 k+1자리 값을 bk ∈ {0, 1}이라고 하면, 1의 보수 표현은 다음과 같이 나타낼 수 있다.
:
1의 보수로 표현되는 수는 최상위 비트 bn-1가 0이면 음이 아닌 값을, 1이면 양이 아닌 값을 가진다.
1의 보수 표현에서 부호 반전은 비트열 x의 비트를 반전시켜 수행할 수 있다. x와 비트 반전된 fx는 항상 다음을 만족한다.
:
x의 1의 보수는 xc = fx로 표현할 수 있다. 따라서 감산은 다음과 같이 다시 쓸 수 있다.
:
비트 반전이 반수에 대응하므로, 0은 000...002과 111...112의 두 가지 표현 방법을 가진다.
2. 1. 음수 표현
1의 보수 표현에서 양수는 일반적인 이진수 체계를 사용한다. 음수의 경우 해당 양수 값의 비트를 반전시켜 표현한다. 최대 양수 값은 부호 비트(최상위 비트)가 0이고 나머지 비트가 1인 경우이며, 최소 음수 값은 부호 비트가 1이고 나머지 비트가 0인 경우이다.4비트 시스템에서 -7부터 +7까지의 모든 가능한 값은 다음과 같다.
+ | − | |
---|---|---|
0 | 0000 | 1111 |
1 | 0001 | 1110 |
2 | 0010 | 1101 |
3 | 0011 | 1100 |
4 | 0100 | 1011 |
5 | 0101 | 1010 |
6 | 0110 | 1001 |
7 | 0111 | 1000 |
+0과 -0은 모두 0으로 테스트하면 참(TRUE)을, 0이 아닌 것으로 테스트하면 거짓(FALSE)을 반환한다.
1의 보수를 사용하면 이진수를 음의 정수에 대응시킬 수 있다. n비트 이진수 x와 그 보수 xc는 다음 관계를 만족한다.
:
위 식에서 2n - 1의 배수를 0으로 간주하면 다음과 같이 표현할 수 있다.
:
이는 x의 보수 xc를 x의 역수 -x로 생각하는 것을 의미한다.
:
0부터 2n-1 - 1까지의 음이 아닌 정수를 일반적인 위치 기수법의 이진 표현에 대응시키면, 이러한 수의 보수로서 음의 정수에 대한 1의 보수 표현을 얻을 수 있다.
n=4자리 이진수에 대한 대응표는 다음과 같다.
대응하는 정수 | 이진수 | 대응하는 정수 | 이진수 |
---|---|---|---|
0 | 00002 | 0 | 11112 |
1 | 00012 | −1 | 11102 |
2 | 00102 | −2 | 11012 |
3 | 00112 | −3 | 11002 |
4 | 01002 | −4 | 10112 |
5 | 01012 | −5 | 10102 |
6 | 01102 | −6 | 10012 |
7 | 01112 | −7 | 10002 |
n자리 이진수의 k+1자리 값을 bk ∈ {0, 1}이라고 하면, 1의 보수 표현은 다음과 같이 나타낼 수 있다.
:
1의 보수로 표현되는 수는 최상위 비트 bn-1가 0이면 음이 아닌 값을, 1이면 양이 아닌 값을 가진다.
1의 보수 표현에서 부호 반전은 비트열 x의 비트를 반전시켜 수행할 수 있다. x와 비트 반전된 fx는 항상 다음을 만족한다.
:
x의 1의 보수는 xc = fx로 표현할 수 있다. 따라서 감산은 다음과 같이 다시 쓸 수 있다.
:
비트 반전이 반수에 대응하므로, 0은 000...002과 111...112의 두 가지 표현 방법을 가진다.
2. 2. 1의 보수 표현에서의 연산
1의 보수를 이용해 연산을 할 때는, 8자리의 이진수 01001011(십진수 75)의 모든 자리의 수를 반전시키는 방식으로 계산한다. 예를 들어, 01001011의 1의 보수는 10110100이다.1의 보수로 계산할 때 한 자리가 더 길어지는 경우에는 캐리 값을 결과값에 더해야 한다. 예를 들어, 19(00010011)와 -3(11111100, 3에 대한 1의 보수)을 더하면 15(100001111)가 되고, 여기서 발생한 캐리(00000001)를 더하면 최종 결과인 16(00010000)을 얻는다.
1의 보수 표현에서 부호 전환은 2의 보수보다 쉽지만, 덧셈과 뺄셈은 더 복잡하다. 최상위 비트가 0이면 음수가 아니고, 1이면 양수가 아니다.
1의 보수 표현에서 2진수를 비트열로 보면, 부호 반전은 비트열의 비트를 반전시켜 수행할 수 있다. 비트 반전은 각 비트에 대한 부정 연산을 의미하며, 0은 1로, 1은 0으로 출력한다.
x와 그것을 비트 반전시킨 는 항상 다음을 만족한다.
:
x의 1의 보수는 로 표현할 수 있다. 따라서 감산은 다음과 같이 다시 쓸 수 있다.
:
비트 반전이 반수에 대응하기 때문에, 0은 과 의 두 가지 표현 방법을 가진다.
2. 2. 1. 순환 올림(End-Around Carry)
두 값을 더하는 것은 간단하다. 최하위 비트에 값들을 맞춰 더하고, 자리올림수는 왼쪽으로 한 자리 이동시켜 더한다. 자리올림수가 단어의 끝을 넘어서면 "돌아온"(wrapped around) 것으로 간주하며, 이를 "순환 자리올림"이라고 한다. 이런 경우, 비트는 가장 오른쪽 비트에 다시 더해져야 한다. 이러한 현상은 2의 보수 연산에서는 발생하지 않는다.```text
0001 0110 22
+ 0000 0011 3
3. 음의 영(Negative Zero)
음수 영은 부호 있는 정수 표현에서 모든 비트가 1인 상태를 말한다. 이는 1의 보수 규칙을 따르는데, 왼쪽 끝 비트가 1이면 값이 음수이고, 음수는 그 크기의 비트 보수라는 규칙이다.[1] 이 값은 계산 시에는 0으로 동작한다. 다른 값에 음수 영을 더하거나 빼도 원래 값이 그대로 유지된다.[1]
4. 음의 영 문제 해결
보수를 이용한 감산기를 사용하면 음수 영(negative zero) 문제가 발생하지 않는다. 첫 번째 피연산자는 수정 없이 감산기에 전달되고, 두 번째 피연산자는 보수를 취한 후 감산 연산을 수행하면 올바른 결과가 생성되어 음수 영이 발생하지 않는다.
5. 예시
8자리의 이진수 01001011(십진수로 75)의 1의 보수를 구하는 과정은 다음과 같다.
:11111111 (8+1=9자리)
:-01001011 (8자리)
:-----------
:10110100 (8자리)
01001011의 모든 자릿수를 반전시키면 10110100이 되며, 이것을 1의 보수라고 부른다.
1의 보수를 이용한 덧셈에서 캐리가 발생하면, 결과값에 캐리를 더해야 한다. 예를 들어, 19 + (-3)을 1의 보수로 계산하면 다음과 같다.
:00010011 (19)
:+11111100 (-3; 3에 대한 1의 보수)
:-----------
:100001111 (15; 1의 Carry 발생)
:+00000001 (Carry)
:-----------
:00010000 (16; 최종 결과)
1의 보수는 2의 보수보다 부호 전환은 쉽지만, 덧셈과 뺄셈은 더 복잡하다.
6. 1의 보수 표현의 장단점
1의 보수는 2의 보수보다 부호 전환은 쉽지만 덧셈과 뺄셈은 어렵다. 1의 보수로 계산할 때 한 자리가 더 길어지는 경우에는 캐리 값을 결과값에 더한다.[1]
8자리 이진수 01001011(십진수로 75)의 1의 보수를 구하는 과정은 다음과 같다.[1]
:11111111 (8+1=9자리)
:-01001011 (8자리)
:-----------
:10110100 (8자리)
01001011의 모든 자리의 수를 반전시키면 10110100이 되는데, 이것을 1의 보수라고 부른다.[1]
1의 보수를 이용한 덧셈의 예는 다음과 같다.[1]
:00010011 (19)
:+11111100 (-3; 3에 대한 1의 보수)
:-----------
:100001111 (15; 1의 Carry 발생)
:+00000001 (Carry)
:-----------
:00010000 (16; 최종 결과)
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com